#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
#define N 1000007
using namespace std;
 
int main() // 补齐字符串，按照26进制进行计算
{
	string s1, s2;
	int len1 = 0, len2 = 0;
	while (cin >> s1 >> s2 >> len1 >> len2)
	{
		// 将该字符串看成是26进制数，为了简单起见，将s1和s2补长到len2长度
		// 注意：s2补的是'z'+1, 因为'z' - 'a' = 25
		s1.append(len2 - s1.size(), 'a');
		s2.append(len2 - s2.size(), (char)('z' + 1));
 
		vector<int> arr(len2); // 确认s1和s2的两个字符串每个位置上的差值
		for (int i = 0; i < len2; ++i)
		{
			arr[i] = s2[i] - s1[i];
		}
 
		int result = 0; // 确认len1和len2之间可组成的不同字符串的个数
		for (int i = len1; i <= len2; ++i)
		{
			for (int k = 0;k < i;k++)
			{
				result += arr[k] * pow(26, i - 1 - k);
			}
		}
		//所有字符串最后都不包含是s2自身，所以最后要减1；
		cout << (result - 1) % N << endl;
	}
	return 0;
}